/**
	***********************************
	* �ļ���:	rcc.c
	* ����:		stone
	* �汾:		V0.1
	* ����:		2018-3-29
	* ����:		����ʱ��Դ
	***********************************
	*/
#include "stm32f10x.h"
#include "stm32f10x_flash.h"
#include "rcc.h"
 
/* ����:	RCCʱ������
	 ����:	��
   ����ֵ:��
 */
void rcc_config(void)
{ 
	ErrorStatus HSEStartUpStatus;
 
	/* RCC�Ĵ�������ΪĬ������ */
	RCC_DeInit();
	
	/* ���ⲿ����ʱ�� */
	RCC_HSEConfig(RCC_HSE_ON);
	/* �ȴ��ⲿ����ʱ���ȶ� */
	HSEStartUpStatus = RCC_WaitForHSEStartUp();
	if(HSEStartUpStatus == SUCCESS) 
	{ 
		/* ����HCLK = SYSCLK */
		RCC_HCLKConfig(RCC_SYSCLK_Div1);
		/* ����PCLK2 = HCLK */
		RCC_PCLK2Config(RCC_HCLK_Div1);
		/* ����PCLK1 = HCLK / 2 */
		RCC_PCLK1Config(RCC_HCLK_Div2);
		
		/* ����FLASH������ʱ */
		FLASH_SetLatency(FLASH_Latency_2);
		/* ʹ��Ԥȡַ���� */
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
		
		/* ����PLLʱ��ԴΪHSE��Ƶ9 72MHz */
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
		/* ʹ��PLL */
		RCC_PLLCmd(ENABLE);
		/* �ȴ�PLL�ȶ� */
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
		
		/* ����PLLΪϵͳʱ��Դ */
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
		/* �ȴ�ϵͳʱ��Դ�л���PLL */
		while(RCC_GetSYSCLKSource() != 0x08);
 
		/* ����ϵͳ������ʱ��ԴΪFCLK */
		SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
	}
}
